Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Cover art UX improvements #1207

Merged
merged 14 commits into from
Nov 30, 2017
Merged

Cover art UX improvements #1207

merged 14 commits into from
Nov 30, 2017

Conversation

Be-ing
Copy link
Contributor

@Be-ing Be-ing commented Mar 6, 2017

Rework the UX for showing DlgCoverArtFullSize:

  • don't close DlgCoverArtFullSize when moving cursor off WCoverArt. IMO this was surprising and confusing.
  • close DlgCoverArtFullSize when clicked
  • show DlgCoverArtFullSize when right clicking WSpinny. Before, right clicking on WSpinny paused the track and enabled slip mode. I can't think of a use case for that behavior. The change allows skins to show only WSpinny with cover art but without taking space with a redundant WCoverArt and still make DlgCoverArtFullSize available.

This will allow skins to make the DlgCoverArtFullSize feature available
without needing space for both WCoverArt and WSpinny
// Trigger a mouse move to immediately line up the vinyl with the cursor
mouseMoveEvent(e);
}
} else if (m_bShowCover) {
Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note that this will also work for middle clicks.

This was referenced Mar 6, 2017
@daschuer
Copy link
Member

daschuer commented Mar 6, 2017

Ah Ok. The first two commits are Ok. I am unsure with the last.

In case of a dedicated cover, the big cover is shown on the left click and a context menu appears on the right click. This is more natural to me but does not fit for the shinny.
Showing the big cover on a control is IMHO unexpected as well.
Can't we add a visual click handler or something to the shinny to allow the cover features?

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 6, 2017

I agree that right clicking the spinny is not an intuitive way to show the big cover art. However, this is not an important feature, so I don't think it's a big deal if it's not very easy to discover.

Can't we add a visual click handler or something to the shinny to allow the cover features?

What do you mean?

@daschuer
Copy link
Member

daschuer commented Mar 7, 2017

Something like a hamburger button, that appears when hovering on the cover art spinny. Clicks on it can be handled like other clicks on a cover.

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 7, 2017

I think that would feel cluttered and get annoying for users who want to left click the spinny.

@daschuer
Copy link
Member

Can we come to a conclusion here? Merge as it is?
Can anyone else have a brief look on it?

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 23, 2017

I'm in favor of merging as-is, but it would be good for someone else to test.

@esbrandt
Copy link
Contributor

don't close DlgCoverArtFullSize when moving cursor off WCoverArt. IMO this was surprising and confusing.

IIRC this was a design decision to avoid some issues, can´t remember the details, see pull #278

Tested your PR on OSX 10.11.1 with latest master:

  • You can stack multiple FullSize covers, by right clicking on different spinnies, or the library cover art. The FullSize covers are centered, not movable and intransparent, what are the reasons to allow more than one FullSize cover at a time?
  • The FullSize covers stay on top, even if you open the preferences, or switch programs and Mixxx is in the background. If Mixxx is in the background you can't close the cover art by pressing ESC.
  • When you change the cover art by using the WCoverArt right-click menu while having the cover on full size display, the full size display does not change to the new cover.
  • spinny tooltip needs update.

show DlgCoverArtFullSize when right clicking WSpinny. Before, right clicking on WSpinny paused the track and enabled slip mode. I can't think of a use case for that behavior. ...

I find it odd that we have left click for FullSize display on WCoverArt for library and decks, and right-click for spinnies. Although the and left-/ and right- click behavior of WCoverArt is not that obvious though.

... The change allows skins to show only WSpinny with cover art but without taking space with a redundant WCoverArt and still make DlgCoverArtFullSize available.

Removing WCoverArt in the decks as redundant, cuts out the users who wish not to use spinnies for whatever reasons.

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 25, 2017

IIRC this was a design decision to avoid some issues, can´t remember the details, see pull #278

I didn't find any discussion about it when briefly looking through that PR, but maybe I didn't look hard enough.

what are the reasons to allow more than one FullSize cover at a time?

I hadn't thought anyone would try that. I'm not sure why you'd want to see another cover without closing the previous one first. Is this really an issue? Even if a user does this, they can just click on each cover to hide it.

Removing WCoverArt in the decks as redundant, cuts out the users who wish not to use spinnies for whatever reasons.

LateNight does not have both and I haven't seen a single user ask or complain about it. On the other hand, the multitude of options related to cover art in Deere 2.0 is confusing. Furthermore, screen space is precious; we should not have redundant widgets using more than they need.

I'll look into the other issues.

@esbrandt
Copy link
Contributor

I hadn't thought anyone would try that

Just acting like a potential user. This is a minor issue, otoh your PR aims to fix an minor issue as well.

LateNight does not have both and I haven't seen a single user ask or complain about it.

We introduced Coverart in 2.0. There are no metrics how many of our users change from the default skin (LateNight as of 2.0). LateNight supports coverart in the library (Fullsize), and in the spinnies (underlay image). Those who never change from the default skin, likely not even know other coverart options exist. Also because our 2.0 documentation is incomplete/out-of-date.

Users of Deere/Shade currently have coverart in the decks enabled/spinnies disabled per default. Taking away features in a minor revision we introduced just a major revision earlier - without need, why?

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 25, 2017

My primary goal with this PR is to make it possible to show the cover art in only one place (the spinny) and keep the ability to show the big cover without having a redundant cover art widget taking up space. Come to think of it, that does not necessitate removing an option for the cover art widget though.

@MK-42
Copy link
Contributor

MK-42 commented Mar 26, 2017

I'm not sure why you'd want to see another cover without closing the previous one first. Is this really an issue?

From my point of view it would make most sense to always show only one fullsize cover. Stacking multiple of them feels odd. Can we close the old when opening the next?

Currently clicking on the same small cover-art twice opens and closes the fullsize one again. That makes sense. But I would expect, that every small cover-art click would close any existing, and if the clicked-on is different from the one that was open, the new one should be opened in full size. So always only one big cover-art visible.

* let DlgCoverArtFullSize have a border
* set DlgCoverArtFullSize window title to "Album Artist - Album (Year)"
(or Album instead of Album Artist if there is no Album Artist)
* let DlgCoverArtFullSize be resized either by dragging the window
border or using a mouse scroll wheel
* update DlgCoverArtFullSize when cover art is changed
* update DlgCoverArtFullSize when track is reloaded
* show WCoverArtMenu on right click of DlgCoverArtFullSize
* show WCoverArtMenu on right click of WSpinny when the track does not
have cover art set
* update WSpinny tooltip
* don't hide DlgCoverArtFullSize when moving mouse off of WCoverArtLabel
@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 28, 2017

I made DlgCoverArtFullSize a normal window with a border. I think this obviates making only one DlgCoverArtFullSize show at a time, which would be quite complicated to implement. It can now be resized by dragging the window border or by using a mouse scroll wheel. Unfortunately Qt does not make it easy to preserve the aspect ratio of a widget, so the graphic is scaled proportional to its aspect ratio, but there can be blank space on the sides of the window if it is stretched outside of the cover's aspect ratio. Also, right clicking on DlgCoverArtFullSize brings up the cover art context menu. Right clicking on a WSpinny with a track loaded that does not have cover art set also brings up the cover art context menu. DlgCoverArtFullSize responds to changing the cover art and loading new tracks too.

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 30, 2017

@esbrandt, could you test again?

@MK-42
Copy link
Contributor

MK-42 commented Mar 30, 2017

Giving those windows the decorator makes closing them much more obvious, the resize on scroll is also nice.

Before merge the qDebugs should be removed, as the resize event is spamming the log atm. Other than that, 👍

@esbrandt
Copy link
Contributor

Looks pretty good now.
Might be some platform specific issue (macOS here) left:

  • With the latest changes the full size cover still does not respond to cover changes. Cover art in library, and on spinny work as expected.
  • Right- clicking on the spinny without cover (no matter the deck), brings up the context menu in the upper left corner of the screen (main widget?), not below the cursor.
  • A track with incomplete metadata (e.g. no artist, but title), brings up an empty window title for the full size cover. What if we just display Mixxxinstead?

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 30, 2017

With the latest changes the full size cover still does not respond to cover changes. Cover art in library, and on spinny work as expected.

How are you changing the cover? From the popup window, the spinny, or the library?

@Be-ing
Copy link
Contributor Author

Be-ing commented Mar 30, 2017

I'm thinking of removing the click to close action now that there is a normal window border. Thoughts?

@esbrandt
Copy link
Contributor

I'm thinking of removing the click to close action now that there is a normal window border. Thoughts?

+1 , and we have still ESC to close the window.

@esbrandt
Copy link
Contributor

How are you changing the cover? From the popup window, the spinny, or the library?

Library

@ronso0
Copy link
Member

ronso0 commented Apr 1, 2017

Joining this conversation a bit late, I'm afraid I'm the party pooper when I say I don't like this new UX. Sure, that Cover would close when leaving CoverArt icon with mouse, was a bit unexpected but I got used to it. Furthermore, this saves a click when you'd want to quickly get back to skin.

  • previous, borderless Cover was really elegant, windowed it feels like being thrown back to (in my case, XFCE) ugly OS window styling
  • Covers taller than screen don't get resized but are cropped by screen and cover the rest of mixxx
  • Covers also wider than screen get resized to screen width (height cropped), but then I can't scroll to zoom out, I'd have to undock window first

Those aspects I consider a UX and aesthetic regression, there's much more interaction necessary to just view the whole Cover.

Wouldn't your

primary goal with this PR is to make it possible to show the cover art in only one place (the spinny) and keep the ability to show the big cover without having a redundant cover art widget taking up space.

and just removing closing the Cover on mouse-out be enough?

@Be-ing
Copy link
Contributor Author

Be-ing commented Apr 2, 2017

I'll look into scaling down covers that are larger than the screen. Previously it checked whether the cover was bigger than the largest window of Mixxx, but I don't think that's a great approach, especially with the cover being a normal window with a border. I'll look into how to detect the size of the screen rather than the size of the main Mixxx window.

just removing closing the Cover on mouse-out be enough?

IMO yes, that was enough, but @esbrandt was not satisfied because of the aforementioned issues.

@ronso0
Copy link
Member

ronso0 commented Apr 2, 2017

I'll look into scaling down covers that are larger than the screen.

nice! If cover art is scaled to fit (plus a little space around?) when opened, can be zoomed with scroll wheel and closes on click, there's no need for window decoration anymore, right? Or is this an unavoidable consequence of the new implementation?

@Be-ing
Copy link
Contributor Author

Be-ing commented May 12, 2017

One small question: when scrolling to zoom, it acts like dragging bottom right corner to resize (upper left corner is fixed). Is this window manager dependent or could you make it zoom from/to center?

Good idea. I implemented that.

@esbrandt, could you test this again?

@sblaisot
Copy link
Member

I would instead prefer zoom from mouse position, that's imho a more natural approach (like in google maps for example).

@ronso0
Copy link
Member

ronso0 commented May 13, 2017

I would instead prefer zoom from mouse position, that's imho a more natural approach (like in google maps for example).

I agree, this would be consistent with most graphics applications.

@Be-ing
Copy link
Contributor Author

Be-ing commented May 13, 2017

Good idea @sblaisot. I'll work on that.

@Be-ing
Copy link
Contributor Author

Be-ing commented Jun 1, 2017

Using the mouse wheel now zooms in to/out from the cursor position. Ready for merge?

@daschuer
Copy link
Member

daschuer commented Jun 2, 2017

The scroll resizing should stop at maximum image size. Else you get white border, which will persist after shrinking again.

@daschuer
Copy link
Member

daschuer commented Jun 2, 2017

The same happens if you shrink to minimum, using a non square cover.

@uklotzde uklotzde added the ui label Oct 29, 2017
@Be-ing
Copy link
Contributor Author

Be-ing commented Nov 9, 2017

Admittedly this branch isn't perfect with the issue of whitespace appearing when resizing to extremes, but I think it's a good step forward and good enough for merge as is.

@esbrandt
Copy link
Contributor

Admittedly this branch isn't perfect with the issue of whitespace appearing when resizing to extremes, but I think it's a good step forward and good enough for merge as is.

Mostly agree. Resizing theCover library column isn't perfect too when resizing to extremes. We had a discussion back than that it only matters in rare cases, and nonetheless merged the feature .

My only regret with this PR is that we loose the ability to display the Spinnies WITHOUT covers.
I still think we should not force remove the feature.

@Be-ing
Copy link
Contributor Author

Be-ing commented Nov 19, 2017

My only regret with this PR is that we loose the ability to display the Spinnies WITHOUT covers.
I still think we should not force remove the feature.

This PR does not remove that ability. That was removed from the Deere skin in #940. Adding it back requires changing the skin.

@Be-ing
Copy link
Contributor Author

Be-ing commented Nov 24, 2017

@esbrandt ready for merge then?

@uklotzde
Copy link
Contributor

LGTM 👍 I like it. It really improves the usability of the full size cover art window.

I can deal with the remaining open issues. After upgrading to Qt5 we need to revisit all UI elements again, so I would not spend more time on polishing every detail.

Some final thoughts from the other reviewers? Unfortunately I'm using the same OS and skin as @Be-ing so my opinion might be biased ;)

// Scale down dialog to screen size if the pixmap is larger than the screen
QSize dialogSize = m_pixmap.size();
const QSize availableScreenSpace =
QApplication::desktop()->availableGeometry().size();
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is too large in full screen mode. The cover art window extends below the bottom of the screen, because it will always be placed underneath the menu bar of the main window and is not able to move above it. This restriction does not apply if the application uses a regular window. @Be-ing Any ideas for an easy fix?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

What window manager do you use? With KWin (X11), I have a different issue with full screen mode. In that case, the cover art window behaves as if my bottom menu bar is still showing as if I was not in full screen mode.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We seem to have different issues with different software setups and these very well could change with Qt5, so I am doubtful it is worthwhile to perfect all the edge cases right now.

Copy link
Contributor

@uklotzde uklotzde Nov 27, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Using availableGeometry().size() * 0.9 instead of the desktop size keeps the main window visible around the cover art popup in all directions and works much better for me. Simple but effective.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Clever workaround!

@uklotzde uklotzde added this to the 2.1.0 milestone Nov 25, 2017
@daschuer
Copy link
Member

The general behaviour is OK.
There is an issue that the cover window moves around depending on the size of the previous cover. I think it should either save the last window position or display always centred.
Currently only the second window call up is perfectly centred.
This is nothing that prevent merging though, so LGTM.

I don't know why the resizeEvent triggered by setGeometry does not
take care of this, but hey, this works.
@Be-ing
Copy link
Contributor Author

Be-ing commented Nov 30, 2017

There is an issue that the cover window moves around depending on the size of the previous cover. I think it should either save the last window position or display always centred.

Fixed. The window is centered when loading a new cover art image now. I think this PR is ready for merge.

@uklotzde
Copy link
Contributor

LGTM. Thanks for your patience, Be ;)

@uklotzde uklotzde merged commit 279236f into mixxxdj:master Nov 30, 2017
@Be-ing Be-ing deleted the cover_art_ux branch November 30, 2017 20:08
@ronso0
Copy link
Member

ronso0 commented Dec 12, 2017

Just found a bug:
When I zoom into a cover art window so that it's bigger than the screen and then close it, I can't zoom out when I open it again. Manual resizing works though.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging this pull request may close these issues.

7 participants